System and Method for Synchronizing Timing Across Multiple Streams

ABSTRACT

Systems and methods of adaptive streaming are discussed. Transcoded copies of a source stream may be aligned with one another such that the independently specified portions of each transcoded stream occur at the same locations within the content. These transcoded copies may be produced by one or more transcoders, whose outputs are synchronized by a delay adjuster. A fragmenter may use the synchronized and aligned streams to efficiently produce fragments suitable for use in adaptive streaming.

BACKGROUND

Video content may be transmitted over links with unknown or variablebandwidth characteristics. To accommodate the different bandwidths thatmay be available, the video content may be offered in several formats,each with different bandwidth requirements. If the quality of acommunication link degrades during delivery such that the selectedformat is no longer supported, a server may stop transmitting theselected format and select a format with lower-bandwidth requirementsfor transmission. Varying the format of a video stream over time isknown as adaptive streaming. A need exists for systems and methods thatenable adaptive streaming that are modular, scalable, and efficient.

SUMMARY

Some aspects of the disclosure relate to methods and systems that mayfacilitate adaptive streaming. According to one aspect of thedisclosure, a content stream may be sent to one or more transcoders fortranscoding into several different formats.

According to another aspect of the disclosure, the outputs of one ormore transcoders may be sent to a delay adjusting device, whichsynchronizes the outputs of the transcoders.

According to a further aspect of the disclosure, the output of a delayadjusting device may be sent to a fragmenter, which packages transcodedstreams into fragments. The fragments may be independently specified.This enables any one fragment to be followed by any other fragment,which may be used, for example, to facilitate adaptive streaming. Eachfragment may be indexed and stored for immediate or later access in thesame format as it is received. Alternatively, each fragment may beformatted into a packet, such as an internet protocol (IP) packet, tofacilitate either immediate transmission or later transmission.

According to yet another aspect of the disclosure, a fragmenter may relyon its inputs being synchronized and aligned. This may allow afragmenter to produce fragments that are independently specified withoutexamining the content of some or all of the inputs. For example, afragmenter may examine the content of one input to identify when itsfragments should begin and end. The fragmenter may use these beginningand ending points to begin and end the fragments of the other inputsthat are aligned and synchronized with the input that was examined.Similarly, where the fragmenter receives an indication of whereindependently specified portions begin and end, the indication may beused to begin and end the fragments of other inputs that aresynchronized and aligned.

The preceding presents a simplified summary in order to provide a basicunderstanding of some aspects of the disclosure. The summary is not anextensive overview of the disclosure. It is intended neither to identifykey or critical elements of the disclosure nor to delineate the scope ofthe disclosure. The summary merely presents some concepts of thedisclosure in a simplified form as a prelude to the description below.

BRIEF DESCRIPTION OF THE DRAWINGS

The present disclosure is illustrated by way of example and is notlimited in the accompanying figures.

FIG. 1 illustrates an example of a system that allows adaptive streamingto occur.

FIG. 2 illustrates an example method for selecting fragments duringadaptive streaming.

FIG. 3 illustrates an example of two video streams that are aligned andone video stream that is not aligned.

FIG. 4 illustrates an example timing of streams that may be output fromone or more transcoders.

FIG. 5 illustrates an example output of a delay adjusting device.

FIG. 6 illustrates a process for synchronizing streams.

FIG. 7 illustrates an example computing device on which various methodsand devices of the disclosure may be implemented.

DETAILED DESCRIPTION

In the following description of various illustrative embodiments,reference is made to the accompanying drawings, which form a parthereof, and in which is shown, by way of illustration, variousembodiments in which aspects of the disclosure may be practiced. It isto be understood that other embodiments may be utilized, and structuraland functional modifications may be made, without departing from thescope of the present disclosure.

FIG. 1 illustrates an example of a system for adaptive streaming. In theexample of FIG. 1, there is shown a source stream 101, which comes froma source 100. The source 100 may be any type of source, such as adatabase or a capture device such as a camera. In one aspect, contentsource 100 may send or make available a feed to an encoder that outputssource stream 101 in real-time. The encoder may be, for example, amezzanine encoder, which is an encoder whose output is of very highquality. In still further examples, source stream 101 may be created byreading a saved file. Source stream 101 may be of any quality level, buthigh quality encoding, such as mezzanine-level encoding, generallyallows for higher quality output streams. The source stream mayrepresent any of a variety of media types, such as, for example, data,an audio stream, a video stream, an audio and video stream (e.g., amovie or television show), an interactive commercial, television, orgame feed, a song, or any other content stream. Additionally, the sourcestream may originate from any device, such as a video camera, audiorecorder, computer server, or any other type of device capable ofgenerating a data stream.

Source stream 101 may be is received by transcoders 110 and 111.Transcoders 110 and 111 may be implemented in one or more computingdevices. In some embodiments, the computing device may have specialpurpose software and/or hardware, such as hardware to aid in thetranscoding. In other embodiments transcoders may be implemented in ageneral purpose computing device. Transcoder 110 may take source stream101 and generate transcoded streams 120 and 121. Transcoder 111 maketake source stream 101 and generate transcoded streams 122 and 123carrying a common piece of content (e.g., the same video program) butencoded differently. Each of the transcoded streams may transcode, e.g.,compress source stream 101 by a different amount. For example, sourcestream 101 may be encoded at an average bit rate of 40 Mbps; transcodedstream 120 may be encoded at an average bit rate of 10 Mbps; transcodedstream 121 may be encoded at an average bit rate of 5 Mbps; transcodedstream 122 may be encoded at an average bit rate of 2.5 Mbps; andtranscoded stream 123 may be encoded at an average bit rate of 1.2 Mbps.

More or fewer transcoders may be used. For example, a third transcodermay receive source stream 101 and use it to generate additionaltranscoded streams. Similarly, each transcoder may produce more of fewertranscoded streams than then number shown in FIG. 1. For example,transcoder 110 may produce five transcoded streams, and transcoder 111may produce eight transcoded streams.

The transcoders may take a different amount of time to produce each ofthe transcoded streams. For example, transcoded stream 120 may take 10ms to produce, but transcoded stream 121 may take only 6 ms to produce.In this example, transcoded stream 120 is 4 ms behind transcoded stream121. This 4 ms difference may occur because stream 121 is transcodedusing a different profile than stream 120. For example, stream 121 maybe a 5 Mbps stream whereas stream 120 may be a 10 Mbps stream. Even iftranscoder 110 produces transcoded streams 120 and 121 in the sameamount of time, the transcoded streams still may not be synchronizedbecause transcoder 111 may produce transcoded streams 122 and/or 123 ina different amount of time than transcoder 110 takes to producetranscoded streams 120 and 121. This difference may exist due to, forexample, differing manufacturer or hardware specifications betweentranscoder 110 and transcoder 111. Differing transcoding profiles amongthe transcoded streams may also cause the transcoded streams to beoutput at different times. The process of transcoding streams will bedescribed in more detail below with reference to FIG. 3.

Each of the transcoded streams may be forwarded to a delay adjustercomputing device 130. Delay adjuster 130 may synchronize the transcodedstreams 120-123. In the example given above, transcoded stream 120 was 4ms behind transcoded stream 121. Delay adjuster 130 delays transcodedstream 121 by 4 ms more than it delays transcoded stream 120, resultingin transcoded streams 120 and 121 being synchronized. The synchronizedversions of transcoded streams 120-123 are represented by streams140-143, respectively, in FIG. 1. The process of synchronizing thetranscoded streams will be described in more detail below with referenceto FIGS. 4, 5, and 6. In some embodiments, source stream 101 may also beforwarded to delay adjuster 130 and synchronized with streams 140-143.

Synchronized streams 140-143 may be received by fragmenter 150 andoutput in fragmented form as streams 160-163. Fragmenter 150 may packageeach stream into a series of fragments that are appropriate for use inadaptive streaming playback. For example, each fragment of a videostream created by fragmenter 150 may be playable without requiringinformation from any frames that are outside the fragment. This allows afragment from one stream to be followed by a fragment from any of theother synchronized streams. For example, a fragment from stream 160 maybe followed by the next fragment from stream 160, but it may also befollowed by a fragment from stream 161, 162, 163, or even by a fragmentfrom another stream. The process of fragmenting incoming streams will bedescribed in more detail below.

Fragmented streams 160-163 may be forwarded to a computing device suchas server 170. Server 170 may be, for example, a node in a contentdistribution network, such as a video on demand server. Server 170 mayalso be, for example, a switched digital video server or any otherserver that forwards content to a receiver. As seen in FIG. 1, server170 may forward stream 180 to receiver 190 and stream 181 to receiver191. Each of streams 180 and 181 may be comprised of any combination offragments from streams 160-163. For example, stream 180 may begin withfragments from stream 160, which is encoded at 10 Mbps, but fragmentsfrom stream 161, which is encoded at 5 Mbps, may follow due to, forexample, network congestion between server 170 and receiver 190 that mayinhibit smooth playback of additional 10 Mbps fragments. An example ofhow server 170 may determine which fragments to forward to a receiver isdiscussed below with reference to FIG. 2.

Devices 190 and/or 191 may be any computing device that receives acontent stream. Such a device may have dedicated software and/orhardware for playing, outputting, or otherwise processing a contentstream. For example, a devices 190/191 (“receiver”) may be a television,tablet computer, a personal computer, a smartphone, a digital video(and/or audio) recorder, a terminal, such as a “set top box,” etc. Areceiver may have a display that shows video content from the receivedstreams. In some embodiments, one or more receivers will sendinformation about playback and/or network performance to server 170.They may do this automatically or in response to a query from server170. The information server 170 receives from a receiver may be used toadjust which fragments server 170 will include in the stream being sentto that receiver. Alternatively, or in addition, server 170 may gathernetwork performance data from other sources, such as probes locatedbetween server 170 and one or more of the receivers.

FIG. 2 illustrates an example of how a computing device, such as server170, may select which fragments to transmit to a receiver. In step 201,the highest supported or allocated bit rate is identified. This may bethe highest bit rate supported or allocated by the communication channelor link between server 170 and a receiver, such as receiver 190. Forexample, if a receiver has an allocated bandwidth of 10 Mbps, thisallocation may be identified in step 201. Alternatively, the currentcapacity of the communication or network link may be determined. Forexample, data may be transmitted and the rate at which acknowledgementsof the data's receipt are received may be measured to identify theactual bandwidth available. In addition to considering the link, thecapabilities of the receiver, the equipment connected thereto, and/or auser's subscription plan or status may also be considered in step 201.For example, high definition content may not be transmitted to areceiver that cannot process and/or display such content. Similarly,high definition content may not be transmitted to receivers associatedwith users in a lower tier of service.

In step 202, the highest quality fragments that do not exceed themaximum supported bitrate or capacity determined in step 201 may beselected for initial transmission. Using fragmented streams 160-163 fromFIG. 1 as an example, the fragments of 5 Mpbs stream 161 would beselected if the capacity determined in step 201 were 7 Mbps. Thefragments of stream 160 would not be selected because they are encodedat 10 Mbps, which exceeds the 7 Mbps capacity. The fragments of streams162 and 163, which are encoded at 2.5 Mbps and 1.2 Mbps, respectively,would not be selected because the fragments of stream 161 are encoded ata higher bitrate than the fragments of streams 162 and 163 but do notexceed the 7 Mbps capacity.

In step 203, the selected fragments may be transmitted. For example,server 170 may transmit the selected fragments to receiver 190. Thefragments may be transmitted using a variety of protocols, including,for example, an internet data streaming protocol. Instead of identifyingthe highest quality fragments supported by the link prior to step 203,as was done in steps 201 and 202, the process may start by sendingfragments of a random or predetermined bitrate.

In step 204, a device such as the receiver and/or server 170 maydetermine if errors due to lack of capacity are occurring. An errorthreshold may be established to require that a particular errorcondition (e.g., capacity dropping below a required minimum level)remain for a predetermined amount of time (e.g., 500 ms) before it isconsidered to be an error, in order to avoid lowering the quality of thetransmitted fragments due to momentary interference. An error due tolack of capacity may be a lack of bandwidth. It may also be an inabilityof a receiver to process the currently selected fragments. If a lack ofcapacity is detected, fragments of lower quality than thecurrently-selected fragments may be selected for transmission in thenext time segment in step 206. The next time segment may be of anylength of time, and it may be a set number of fragments that does notnecessarily correlate to a preset amount of time. For example, thenumber of fragments needed to compose 5 seconds of content may beselected in step 206. Alternatively, a set number of fragments, such asone fragment or ten fragments, may be selected in step 206. The lowerquality fragments selected in step 206 may be of the next lower qualitylevel available. Alternatively, if the link speed has been determined,the quality level of the fragments may be selected based on the bit ratethat the link can currently support, similar to step 202, above.

If it is determined in step 205 that higher quality fragments would besupported, then higher quality fragments are selected for transmissionin the next time segment in step 207. Whether higher quality fragmentswould be supported may be determined by measuring the link speed and/orthe capabilities of the receiver. It may also be determined by measuringthe current error rate. (If there are no or very few errors, then higherquality fragments may be used.) As with step 206, the next higherquality level above the quality level of the currently selectedfragments may be selected. Alternatively, the fragments may be selectedbased on the bit rate supported by the link. A delay may be built intothe process to avoid unnecessarily changing which quality level offragments is selected. In other words, the answer to step 204 or 205 mayalways be “no” unless a certain amount of time has passed. In someembodiments, this delay may apply to increasing the quality of theselected fragments, but not to decreasing the quality of the selectedfragments.

If errors due to a lack of capacity are not detected and higher qualityfragments than the currently selected fragments would not be supported,as determined in steps 204 and 205, then fragments of the same qualityas the currently selected fragments are selected for transmission in thenext time segment in step 208.

In steps 206 and 207, if higher or lower quality fragments are notavailable, then the current selection of fragments may be maintained. Inthe case where the lowest quality fragments experience too many errors,the transmission may cease.

The bitrate of the fragments used to transmit content to, for example, asingle receiver may change over time, as described with reference toFIG. 2, and it may be desirable to deliver the content such that thechanges in the bitrate are not noticeable to a user. To facilitate this,it may be desirable for the transcoders to encode the transcoded streamssuch that switching between the streams does not require retransmissionof portions of the content that were already transmitted, e.g., inanother format. This may be achieved by aligning the transcoded streamsas described below.

Using video content as an example, many video codecs organize compressedvideo into i-frames, b-frames, and p-frames. An i-frame, also known asan intra-coded frame, is a fully specified picture for a frame of video,where the decoder can reconstitute the frame of video using just theinformation in the i-frame, and without referencing information for anyother frames. A p-frame, also known as a predicted frame, contains onlyinformation identifying the changes in the image from a previous frameor frames. A decoder handling a p-frame will need to consult informationfrom the previous frame or frames in order to reconstitute the frame ofvideo. Using a p-frame instead of an i-frame may save space, resultingin a more compressed video stream. A b-frame, also known as abi-predictive frame, may be even more compressible, as it contains onlyinformation identifying changes in the image from previous frame(s) andfrom subsequent frame(s).

A source video stream may be transcoded to multiple different streamssuch that any one of the transcoded streams may be switched with anyother of the transcoded streams without re-transmitting any frames. Thismay be accomplished, in one aspect, by encoding the streams such that:(1) an i-frame is located immediately after each switching point; (2)any b-frames or p-frames after a switching point do not reference anyframe located before the switching point; and (3) any p-frames before aswitching point do not reference any frames located after the switchingpoint. Such conditions ensure that the streams can be switched betweenwithout re-transmission of frames because the portions of each streamthat are located between switching points are independently specified.In other words, each of these portions can be played without anyinformation from another portion of the stream.

FIG. 3 illustrates an example of two streams of frames, labeled 120 and121, in which the locations of the i-frames are aligned (e.g., thestreams are encoded such that video frames at common locations withineach stream of the program are both encoded as i-frames). Both streams120 and 121 have i-frames every seventh frame, as seen at locations L₀,L₁, L₂, L₃, and L₄. Locations L₀-L₅ are locations within the sourcecontent stream. For example, L₀ represents the beginning of the sourcecontent stream. L₄ may represent, for example, the end of the firstsecond of the content stream. Each depicted frame may have an associatedprogram time value, indicating when the frame appears in the playback ofthe encoded video. Brackets 300-301, 310-311, 320-321, 330-331, and340-341 each identify an independently specified portion of the stream.In this example, the independently specified portions are groups ofpictures that do not require accessing frames outside of the group whenbeing decoded. Thus, at least locations L₁-L₄ are switching points ofthe type discussed in the previous paragraph for switches betweenstreams 120 and 121. An adaptive video stream, such a stream 180 of FIG.1, may include independently specified portions from each transcodedstream. For example, stream 180 may include portions 300, 310, 321, 331,and 340 of FIG. 3, where at time L₂ the decoder is able to switch fromstream 120 to stream 121 seamlessly.

As seen by frame 350, independently specified portions of a video streammay contain i-frames at locations after the first frame. This does notaffect the ability to switch between streams at locations L₁-L₄.

Stream 399 has also been included in FIG. 3. The i-frames of stream 399are not aligned with streams 120 or 121. If one were to try to switchfrom stream 121 to stream 399, retransmission of information about anearlier location in the content stream may be required. For example, ifone wished to switch from stream 121 to stream 399 at location L₃,portions 301, 311, and 321 of stream 121 would first be transmitted. Theframe of stream 399 that immediately follows location L₃ is a p-frame.P-frames do not specify images independently, but instead indicatechanges from the image of one or more previous frames. Thus, thoseprevious frames of stream 399 must also be transmitted in order todecode the P-frame that occurs immediately after location L₃. This wouldbe inefficient because the one or more previous frames of stream 399need not be played. The previous frames would be transmitted only toallow a later frame to be decoded.

Dividing content streams into independently specified portions has beendescribed with reference to video streams that use i-, b-, and p-frames.The same principle applies to other streams, including non-videostreams. Regardless of the type of content being encoded in the stream,independently specified portions of different transcoded streams may bemixed together. Such mixing does not require re-transmission of datafrom earlier or later locations in the content if the independentlyspecified portions of the transcoded streams are aligned.

One way of achieving alignment across the various transcoded streams issetting a common, constant size for the independently specified portionsof each transcoded stream. For instance, i-frames of each transcodedvideo stream may occur at a constant interval, as in the example ofstreams 120 and 121 in FIG. 3. FIG. 3 is only an example. Longer orshorter intervals may also be used. For example, i-frames of eachtranscoded video stream may occur once every 2 seconds, whichcorresponds to every 48 frames in some video formats. Alternatively, anexternal source may specify when independently specified portions of thetranscoded streams are to begin or end. For example, a clock or othersignal source may send indications to each transcoder for when one ormore independently specified portions are to begin. Although theindependently specified portions may be of a constant size, the size ofthe independently specified portions may vary over time.

The signal source that determines when the transcoders will begin eachindependently specified portion of the transcoded streams may be orinclude the source stream that is being transcoded. For example, thesource stream may include SCTE-35 (Society of Cable TelecommunicationsEngineers, Standard No. 35), signals time codes embedded in audiosignals, or other signals that are used to determine the location of theindependently specified portions.

Assuming source stream 101 is in a format that uses i-frames, thetranscoders may begin the independently specified portions of thetranscoded streams at the locations of some or all of the i-frames ofsource stream 101. For example, the transcoder may begin independentlyspecified portions of the transcoded streams at the same locations asthe i-frames of source stream 101 that begin independently specifiedportions. This results in the independently specified portions of thetranscoded streams aligning with the independently specified portions ofsource stream 101. In this example, source stream 101 may be input into(and optionally output from) delay adjuster 130 along with thetranscoded streams. An additional advantage of aligning the i-frames ofthe transcoded streams with the i-frames of the source stream is alikely increase in image quality.

The locations of the independently specified portions of the transcodedstreams may be determined using a combination of inputs. For example,each independently specified portion may begin at the location of thefirst i-frame of source stream 101 that follows a signal, such as aclock signal or SCTE-35 signal. Similarly, each independently specifiedportion may begin at the location of the first i-frame of source stream101 that occurs after a preset interval, such as, for example, every twoseconds.

One of the advantages of the systems and methods disclosed herein isthat a single source stream may be transcoded by multiple transcoders.Further, each transcoder may employ a different encoding algorithmand/or be supplied by a different vendor. This allows resources to beused efficiently.

Using FIG. 1 as an example, transcoder 110 may be a video encoder thatexcels at producing high-quality transcoded streams. For example,transcoder 110 may use a more sophisticated dual-pass video encodingalgorithm that makes extensive use of the more advanced features of thevideo encoding standard being used. Transcoder 111, on the other hand,may be a video encoder that produces higher-bandwidth streams atnoticeably lower quality than transcoder 110, but nonetheless produceslower-bandwidth streams at similar quality to transcoder 110. Byallowing transcoder 111 to produce the lower-bandwidth streams, forwhich it may have a cost advantage, transcoder 110 can remain dedicatedto encoding the higher-bandwidth streams for which it has a qualityadvantage. This division between encoders may be efficient even iftranscoder 111 cannot produce lower-bandwidth streams with similarquality to transcoder 110. For example, in some embodiments networkcongestion may be rare and the highest bitrate streams may be used mostof the time. In such embodiments, using the higher-quality transcoderfor the highest bitrate streams will maximize quality most of the time.

In environments where multiple source streams are transcoded foradaptive streaming simultaneously, each transcoder may transcodemultiple source streams simultaneously. For example, transcoder 110 mayproduce 10 Mbps and 5 Mbps streams for not only source stream 101 butalso one or more additional source streams. Similarly, transcoder 111may produce 2.5 Mbps and 1.2 Mbps streams for source stream 101 as wellas for one or more additional source streams. As this exampleillustrates, the system of FIG. 1 allows for efficient use of existingtranscoders.

Capacity can also be increased by adding additional transcoders. Becausethe transcoded streams do not need to be synchronized when output fromthe transcoders, any additional transcoders do not need to have similartiming characteristics to any of the existing transcoders.

The mapping of source streams to transcoders may be configured not onlyfor maximum efficiency, but also for reliability. For example, ensuringthat each source stream is transcoded by more than one transcoder allowsthe system to continue to operate even if one transcoder fails. Thenumber of bitrates available for use in adaptive streaming may bereduced by the failure of a transcoder, but the ability to deliver thecontent to a receiver would not be eliminated unless the only streamscapable of being delivered to a receiver were produced by the failedtranscoder. This possibility can be reduced by spreading the productionof low bitrate streams across multiple transcoders. Further, in theevent of a failure of one transcoder, other transcoders may produceadditional transcoded streams or produce transcoded streams at adifferent bitrate.

FIG. 4 illustrates a possible timing of the streams output from one ormore transcoders, such as transcoders 110 and 111 of FIG. 1. Asdiscussed above with reference to FIG. 3, the locations of theindependently specified portions of the streams are aligned. Theindependently specified portions of the streams are identified bybrackets 300-302, 310-312, 320-322, etc. In FIG. 4 the time at which thestreams are output from the transcoders is also illustrated. As seen inFIG. 4, stream 120 is output first, with location L₀ occurring at timeT₀. Stream 122 is output second, with location L₀ occurring at time T₁.Stream 121 is output third, with location L₀ occurring at time T₂.

A computing device such as the delay adjuster 130 synchronizes streams120-122. A possible output of delay adjuster 130 is shown in FIG. 5. Inthe example of FIG. 5, stream 120-122 have been delayed. The result isstreams 140-142, which are identical to streams 120-122 except for theshift in time illustrated in FIG. 5. Notice in FIG. 5 that each streamis delayed to begin at time T₂+Δ. A may be zero. Alternatively, Δ mayrepresent a processing time required by delay adjuster 130.Alternatively, Δ may represent an additional amount of delay beyond thebare minimum required to synchronize the streams.

Setting Δ to an amount beyond the bare minimum allows for variations inthe timing of the output streams. For example, some transcoders mayoutput transcoded streams sporadically rather than at a constant rate.If this is the case, the amount of delay added to the stream by delayadjuster 130 may change with time. Having an additional delay(represented by Δ) built into the system may allow for any bursts ofoutput to be smoothed by delay adjuster 130. Additionally, one may wishto add a new transcoder without interrupting any of the existingstreams, but a new transcoder may have a longer processing time than theexisting transcoders. Having an additional delay built into delayadjuster 130 allows for a slower transcoder to be added withoutaffecting the timing of the streams output from delay adjuster 130.

FIG. 6 illustrates a process by which a device such as the delayadjuster 130 may synchronize the streams it receives. In step 601 theslowest (e.g., most delayed) stream is identified. This may occur in anumber of different ways. In some systems the transcoders themselves mayindicate the amount of delay that exists between each transcoded streamand the source stream. In this example, the slowest stream may beidentified by the stream whose delay is the longest.

In other systems, signals that are included within each stream may beused to identify a common location in each stream. For example, eachstream may include a clock signal and/or an SCTE-35 signal. Otherexamples of signals include labels, such as numbers, that are applied toportions of each stream. For example, each independently specifiedportion of a stream may be numbered. Each of these signals may have beenincluded in source stream 101 or they may have been added to thetranscoded streams by the transcoders. In either case, the stream inwhich an instance of these signals occurs last is the slowest stream.

If a signal from within or associated with the transcoded streams isunavailable, then the features of the transcoded streams themselves maybe used to identify common locations in each stream. For example, thelocation of i-frames that begin independently specified portions of avideo stream may be located. The stream in which the common locationoccurs last is the slowest stream.

In step 602, the difference in delay between each stream and the sloweststream is identified. This difference represents the amount of time thateach stream needs to be delayed in order to synchronize with the sloweststream. (For the slowest stream, the difference is zero.) Where numericdelays are received from the transcoders, the delay between a stream andthe slowest stream can be calculated by subtracting the delay for thestream from the delay for the slowest stream. Where numeric delays havenot been received, the delay for a stream can be calculated by measuringthe time difference between when a common point, such as an i-frame or asignal, is received and when the same point is received in the sloweststream.

In step 603, the delays calculated in the previous step may be increasedby an amount that is the same for each stream. This step is notrequired, but adding this additional delay may be advantageous in somesystems. This delay is represented in FIG. 5 by the symbol Δ, and someof the reasons for including this delay are discussed above withreference to FIG. 5.

In step 604, each stream is delayed by the calculated amount. With thestreams now synchronized, they may be forwarded to fragmenter 150.

An alternative process by which a device such as the delay adjuster 130may synchronize the transcoded streams is to delay each transcodedstream by a preset amount of time relative to a reference stream. Thereference stream may be a transcoding of the source stream, such as thetranscoding for which each common location arrives first. The referencestream may also be the source stream itself. For example, eachtranscoded stream may be delayed such that each location in thetranscoded stream is output one second after the same location in thereference stream.

Using the source stream as a reference stream is more likely inembodiments where the delay adjuster is combined with the transcoder.However, the source stream may be used as a reference by a delayadjuster that is a physically or logically separate component from thetranscoder(s), so long as the delay adjuster receives the source streamor an indication of when the relevant locations in the source streamoccur. Where the source stream is used as a reference, the delayadjuster may synchronize the source stream and output the source streamalong with the transcoded streams.

Fragmenter 150 may package each stream into a series of fragments thatare appropriate for use in adaptive streaming playback. To avoid theneed to include potentially duplicative information in a fragment, asdescribed above with reference to FIG. 3, each fragment may consist ofone or more independently specified portions of a stream. For example,as seen in FIG. 5, the frames indicated by bracket 300 in FIG. 5 maymake up one fragment; the frames indicated by bracket 310 may make upanother fragment; etc. Alternatively, each fragment may consist oflarger portions of the stream. For example, the frames identified bybrackets 300 and 310 may make up one fragment, and the frames identifiedby brackets 320 and 330 may make up another fragment.

When the streams received by fragmenter 150 are synchronized, asdescribed above with respect to delay adjuster 130, for example,fragmenter 150 may be able to fragment the synchronized streams inparallel instead of examining each stream individually to locate thebeginning and end of the independently specified portions of eachstream. For example, the fragmenter may create fragments withoutexamining the contents of the streams it receives. Instead, the delayadjuster or another source may indicate to the fragmenter when eachindependently specified portion of the input streams begin. Thefragmenter may use this indication from the delay adjuster or othersource to begin and end each fragment. By using the indication to beginand end each fragment, the fragmenter is able to produce fragmentswithout examining a stream to locate the independently specifiedportions of the stream. A signal indicating when each independentlyspecified portion begins may be a message transmitted to the fragmenterindependently of the content streams. Alternatively, the signalindicating when independently specified portions begin may be a clocksignal, an SCTE35 signal, or another signal contained in one or more ofthe content streams. Further, the signal may have been added by thetranscoders and/or delay adjuster, or the signal may have been presentin the source stream.

Because the independently specified portions of the streams aresynchronized and aligned, as described above, a single signal can beused for all of the streams that correspond to each source stream.Further, if the streams that correspond to more than one source streamare synchronized and aligned with one another, then a single signal maybe used for the streams, notwithstanding that the streams do notcorrespond to a single source stream.

Where the streams have independently specified portions that are ofconstant duration (e.g. each independently specified portion takes thesame amount of time during playback, such as two seconds), a signal maynot be needed to begin and end each fragment. Instead, the fragmentermay create a fragment for each stream at a present interval that matchesthe duration of the independently specified portions of the inputstreams. Accuracy of the fragmenter's clock may be ensured usingtechnologies such as network time protocol or GPS signals.

In addition to the aspects above, a device such as the fragmenter 150may also examine the input streams and determine where the independentlyspecified portions begin. Fragmenter 150 may do this by, for example, bylocating the i-frames that begin the independently specified portions.

Once the location of a fragment of a stream has been identified, asdiscussed above, the fragmenter may then package the fragment into adeliverable format, such as an IP packet or a group of IP packets. EachIP packet or group of IP packets may contain, for example, anindependently specified portion of a video elementary stream (e.g. aportion of stream 140). Additional information may also be included,such as timing and/or sequencing information that corresponds to theindependently specified portion of the video elementary stream.Alternatively, the fragmenter may package fragments by indexing theirlocations. Examples of how the locations of fragments may be indexedinclude storing pointers or other indications of the location where eachfragment can be found, storing a stream such that a formula may be usedto locate the beginning of each fragment (such as a formula thatmultiplies time in the program by the stream's bitrate), enteringfragments into a database, etc. The indexed fragments may then beretrieved and formatted into a deliverable format at a later time. Thisretrieval may be performed, for example, by server 170.

Because the input streams are synchronized, the fragmenter may determinewhere the independently specified portions begin for one stream and usethat information to package the other streams that correspond to thesame source stream without examining the other streams. Additionally,where the independently specified portions are of a constant size, thefragmenter may determine where an independently specified portion of astream begins by examining the stream, but may rely on the passage oftime to determine where the subsequent independently specified portionsof the stream begin.

In systems where there are multiple source streams, such in a televisionenvironment where there are multiple channels, the transcoded streamsthat correspond to two or more of the source streams may be aligned andsynchronized with one another. For example, transcoded video streamsthat correspond to two or more source streams may all have i-frames thatbegin independently specified portions every two seconds. In such asystem, the fragmenter may apply the concepts described above tofragment these groups of streams that may correspond to more than onesource stream. By fragmenting larger groups of streams using thetechniques described above, the fragmenting process can be made evenmore efficient.

Delay adjusters and fragmenters may be separate or they may bephysically and/or logically combined. Although only one delay adjusterand fragmenter are illustrated in FIG. 1, there may be more than onetranscoder, delay adjuster, and/or fragmenter per source stream.Similarly, transcoders, delay adjusters, and/or fragmenters may handlemultiple source streams.

Both delay adjusters and fragmenters may be physically and/or logicallycombined with transcoders. However, separating these components mayallow for increased modularity, scalability, and efficiency. By having aseparate delay adjuster and fragmenter, these components do not need tobe duplicated across several transcoders. Separating the hardware of thedelay adjusters and/or fragmenters from the hardware of the transcodersmay improve not only modularity but also efficiency because the numberof transcoders needed may differ from the number of delay adjustersand/or fragmenters needed. This separation of hardware may also makeadding capacity, including redundant capacity, easier. For example,additional transcoders can be added without adding additionalfragmenters. Also, fail-safe modes of operation can be provided bytranscoding streams of the same content on different transcoders, asmentioned above. Further, separating transcoders from fragmenters mayfacilitate using the output of transcoders for additional services inaddition to the adaptive streaming services because the transcoder'soutput is not already packaged into fragments.

Where delay adjusters are incorporated into transcoders eitherphysically or logically, the transcoders may communicate with oneanother in order for the slowest stream (and therefore the total amountof delay needed) to be identified. Alternatively, as discussed above, apresent amount of delay relative to the source stream may be used tosynchronize the output streams.

Similar to the discussion above, there may be several servers eventhough only one server (170) is illustrated in FIG. 1. The functions ofserver 170 and fragmenter 150 may be combined into a single device, andmore than one of such device may exist in some embodiments.

FIG. 7 illustrates an example of general hardware and software elementsthat may be used to implement any of the various computing devicesdiscussed above, such as transcoders 110 and 111, delay adjuster 130,fragmenter 150, server 170, and receivers 190 and 191. The computingdevice 700 may include one or more processors 701, which may executeinstructions of a computer program to perform any of the featuresdescribed herein. The instructions may be stored in any type ofcomputer-readable medium or memory, to configure the operation of theprocessor 701. For example, instructions may be stored in a read-onlymemory (ROM) 702, random access memory (RAM) 703, removable media 704,such as a Universal Serial Bus (USB) drive, compact disk (CD) or digitalversatile disk (DVD), floppy disk drive, or any other desired electronicstorage medium. Instructions may also be stored in an attached (orinternal) hard drive 705. The computing device 700 may include one ormore output devices, such as a display 706 (or an external television),and may include one or more output device controllers 707, such as avideo processor. There may also be one or more user input devices 708,such as a remote control, keyboard, mouse, touch screen, microphone,etc. The computing device 700 may also include one or more networkinterfaces, such as input/output circuits 709 (such as a network card)to communicate with an external network 710. The network interface maybe a wired interface, wireless interface, or a combination of the two.In some embodiments, the interface 709 may include a modem (e.g., acable modem). Network 710 may include communication lines such asoptical cables, coaxial cables, Ethernet cables, satellite or otherwireless links (including cellular links), etc. Computing device 700 mayconnect to a plurality of networks simultaneously. Network Interfaces709 may have dedicated hardware for each network, or some or all of thehardware may serve multiple networks simultaneously.

One or more aspects of the disclosure may be embodied in computer-usableor readable data and/or executable instructions, such as in one or moreprogram modules, executed by one or more processors or other devices asdescribed herein. Generally, program modules include routines, programs,objects, components, data structures, etc. that perform particular tasksor implement particular abstract data types when executed by a processorin a computer or other device. The modules may be written in a sourcecode programming language that is subsequently compiled for execution,or may be written in a scripting language such as (but not limited to)HTML or XML. The computer executable instructions may be stored on acomputer readable medium, as described above. As will be appreciated byone of skill in the art, the functionality of the program modules may becombined or distributed as desired in various illustrative embodiments.In addition, the functionality may be embodied in whole or in part infirmware or hardware equivalents such as integrated circuits, fieldprogrammable gate arrays (FPGA), and the like. Particular datastructures may be used to more effectively implement one or more aspectsof the disclosure, and such data structures are contemplated within thescope of executable instructions and computer-usable data describedherein.

Aspects of the disclosure have been described in terms of illustrativeembodiments thereof. While illustrative systems and methods as describedherein embodying various aspects of the present disclosure are shown, itwill be understood by those skilled in the art, that the disclosure isnot limited to these embodiments. Modifications may be made by thoseskilled in the art, particularly in light of the foregoing teachings.For example, each of the features of the aforementioned illustrativeexamples may be utilized alone or in combination or subcombination withelements of the other examples. For example, any of the above describedsystems and methods or parts thereof may be combined with the othermethods and systems or parts thereof described above. For example, oneof ordinary skill in the art will appreciate that the steps describedabove may be performed in other than the recited order, includingconcurrently, and that one or more steps may be optional in accordancewith aspects of the disclosure. It will also be appreciated andunderstood that modifications may be made without departing from thetrue spirit and scope of the present disclosure. The description is thusto be regarded as illustrative instead of restrictive on the presentdisclosure.

What is claimed is:
 1. A method comprising: receiving, at a computingdevice, a plurality of encodings of a common piece of content;identifying a time when a common location within the encodings wasreceived for each encoding; based on the identified times, calculatingan amount of delay for each encoding such that delaying each encoding bythe calculated amount allows for the common location to occurr at thesame time; delaying each encoding by its corresponding calculatedamount; and outputting the delayed encodings from the computing device.2. The method of claim 1, wherein the common location within eachencoding is identified by a clock signal included within each encoding,wherein the encodings are received simultaneously at the computingdevice, and wherein the delayed encodings are output simultaneously fromthe computing device.
 3. The method of claim 1, wherein the commonlocation within each encoding is identified by an SCTE-35 signalincluded within each encoding.
 4. The method of claim 1, wherein thecommon location within each encoding is identified by examining theencodings and locating i-frames that begin independently specifiedportions of each encoding.
 5. The method of claim 1, wherein calculatingan amount of delay for each encoding includes: identifying the latesttime when the common location was received in one of the encodings; anddetermining, for each encoding, the difference between when the commonlocation was received in the encoding and the latest time when thecommon location was received.
 6. The method of claim 5, whereincalculating an amount of delay for each encoding also includes: adding,for each encoding, a common amount to the determined difference.
 7. Themethod of claim 1, wherein calculating an amount of delay for eachencoding includes: identifying the earliest time when the commonlocation was received in one of the encodings; determining thedifference between when the common location was received in the encodingand the earliest time when the common location was received; andsubtracting the determined difference from a preset amount of time. 8.An apparatus comprising: a processor; and a memory storing executableinstructions that configure the apparatus to perform: receiving aplurality of aligned, synchronized encodings of a common piece ofcontent; without examining the contents of at least one of the pluralityof encodings, packaging each of the encodings into fragments that areeach independently specified.
 9. The apparatus of claim 8, wherein theinstructions further configure the apparatus to perform: receiving anindication of times when independently specified portions of at leastone of said encodings begin; wherein said packaging is performed byusing the received indication to begin fragments of each of theencodings at the indicated times.
 10. The apparatus of claim 8, whereinthe packaging is performed by: examining a first of the encodings toidentify when independently specified portions begin; and beginningfragments of each of the encodings at the identified times whenindependently specified portions begin.
 11. The apparatus of claim 10,wherein identifying when independently specified portions begin includesidentifying when i-frames occur in the first encoding.
 12. The apparatusof claim 8, wherein the packaging is performed by: locating a signalcontained in a first of the encodings that coincides with whenindependently specified portions of the first encoding begin; beginningfragments of each of the encodings at the times that coincide with saidsignal.
 13. The apparatus of claim 12, wherein the signal is a clocksignal.
 14. The apparatus of claim 12, wherein the signal is an SCTE-35signal.
 15. A method comprising: transcoding a first content stream intoa plurality of formats at a plurality of transcoders, wherein thetranscoders align independently specified portions at common locationswithin each transcoding of the first content; sending the transcodingsof the first content to a first computing device that is configured todelay one or more streams; synchronizing, at the first computing device,the transcodings of the first content and outputting the transcodings toa second computing device configured to fragment one or more streams;packaging, at said second computing device, each of the transcodings ofthe first content into fragments that are each independently specifiedwithout examining the contents of at least one of the transcodings. 16.The method of claim 15, further comprising: delivering the content ofthe first content stream from an adaptive streaming server to a receiverby delivering: a first set of fragments that were created, at saidsecond computing device, from one of the transcodings; and at least asecond set of fragments that were created, at said second computingdevice, from another of the transcodings.
 17. The method of claim 15,further comprising: outputting an indication of where the independentlyspecified portions of at least one transcoding is located from at leastone of the transcoders to said first computing device; and sending theindication of where independently specified portions are located fromsaid first computing device to said second computing device; wherein thepackaging at said second computing device is performed by using theindication to locate where to begin and end the fragments of each of thetranscodings.
 18. The method of claim 15, further comprising: sendingthe first content stream to said first computing device; wherein saidfirst computing device synchronizes the transcodings by delaying eachtranscoding by an amount that is calculated by: identifying when acommon location was received in the first content stream; determining,for each transcoding of the first content stream, the difference betweenwhen the common location was received in the first content stream andwhen the common location was received in the transcoding; andsubtracting the determined difference from a preset amount of time. 19.The method of claim 18, wherein said first computing device synchronizesthe first content stream with the transcodings and outputs thesynchronized version of the first content stream to said secondcomputing device simultaneously with the transcodings of the firstcontent stream.
 20. The method of claim 15, further comprising:transcoding a second content stream into the same plurality of formatsas the first content stream, wherein the transcoders align independentlyspecified portions at the same locations within each transcoding of thesecond content, and wherein each independently specified portion of thetranscoded second content has a corresponding independently specifiedportion of the transcoded first content that has the same duration;sending the transcodings of the second content to said first computingdevice; synchronizing, at said first computing device, the transcodingsof the second content such that independently specified portions of thetranscodings of the second content begin at the same time as thecorresponding independently specified portions of the transcodings ofthe first content; outputting the transcodings of the second content tosaid second computing device; packaging, at said second computingdevice, each of the transcodings of the second content into fragmentsthat are each independently specified without examining the contents ofany of the transcodings of the second content.